/*
 * Copyright (c) 2025 CAX Conversion Project
 */
package com.comac.ins.isfd.service;

import com.comac.ins.common.mybatis.core.page.PageQuery;
import com.comac.ins.common.mybatis.core.page.TableDataInfo;
import com.comac.ins.isfd.domain.bo.IsfdResultBo;
import com.comac.ins.isfd.domain.vo.IsfdResultVo;
import com.comac.ins.isfd.domain.vo.ResultCountObjectVo;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Collection;
import java.util.List;

/**
 * 结果库service层接口
 *
 * @author zhouyaoxin
 * @date 2024-7-11
 */
public interface IIsfdResultService {

    /**
     * 结果数据数量
     *
     * @return 结果
     */
    List<ResultCountObjectVo> listCount();

    /**
     * 根据 resultId 从缓存或数据库中获取 IsfdResultVo 对象
     *
     * @param resultId 结果库id
     * @return IsfdResultVo 对象，包含文件信息
     */
    IsfdResultVo getById(Long resultId);

    /**
     * 分页列表查询结果库
     *
     * @param isfdResultBo OSS对象存储分页查询对象
     * @param pageQuery   分页查询实体类
     * @return 结果
     */
    TableDataInfo<IsfdResultVo> queryPageList(IsfdResultBo isfdResultBo, PageQuery pageQuery);

    /**
     * 删除结果库
     *
     * @param ids     结果库id集合
     * @param isValid 判断是否需要校验
     * @return 结果
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 上传 MultipartFile 到对象存储服务，并保存文件信息到数据库
     *
     * @param file        要上传的 MultipartFile 对象
     * @param isfdResultBo 结果元信息
     * @return 上传成功后的 IsfdResultVo 对象，包含文件信息
     */
    IsfdResultVo save(MultipartFile file, IsfdResultBo isfdResultBo);

    /**
     * 文件下载方法，支持一次性下载完整文件
     *
     * @param resultId  结果库id
     * @param response HttpServletResponse对象，用于设置响应头和向客户端发送文件内容
     */
    void download(Long resultId, HttpServletResponse response) throws IOException;
    /**
     * 更新数据
     * @param isfdResultBo 更新信息
     * @return 更新成功后的 IsfdResultVo 对象，包含文件信息
     */
    void update(IsfdResultBo isfdResultBo);

}
